/* 
 *	Copyright (C) 2007 cooleyes
 *	eyes.cooleyes@gmail.com 
 *
 *  This Program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *   
 *  This Program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *  GNU General Public License for more details.
 *   
 *  You should have received a copy of the GNU General Public License
 *  along with GNU Make; see the file COPYING.  If not, write to
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
 *  http://www.gnu.org/copyleft/gpl.html
 *
 */
#include "tta_codec.h"
#include <stdlib.h>
#include <string.h>
#include <ttacodec.h>


TtaCodec::TtaCodec() {
	init_flag = false;
	codec = NULL;
};

TtaCodec::~TtaCodec() {
};

char* TtaCodec::initialize(AudioCodecInitData* init_data) {
	codec = tta_codec_decoder_new(init_data->samplerate, init_data->channels, init_data->sample_bits, init_data->samples_per_decoded);
	if ( codec == NULL )
		return "TtaCodec : tta_codec_decoder_new fail";
	init_flag = true;
	return 0;
};

void TtaCodec::finalize() {
	if( init_flag ) {
		tta_codec_free((TTA_codec*)codec);
		codec = NULL;
		init_flag = false;
	}
};

int32_t TtaCodec::decode(void* data, uint32_t data_len, void* pcm_data) {
	if( init_flag ) {
		return tta_codec_decoder_decode_frame((TTA_codec*)codec, data, data_len, pcm_data);
	}
	else
		return -1;
};

void TtaCodec::reset() {
	TTA_codec* tta_codec = (TTA_codec*)codec;
	bit_buffer_init_read(tta_codec->fbuf);
};

bool TtaCodec::frame_decode_finished() {
	TTA_codec* tta_codec = (TTA_codec*)codec;
	if ( tta_codec->fbuf->bitpos >= tta_codec->fbuf->BIT_BUFFER_END )
		return true;
	else
		return false;
};
